iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
AI & Data

30天深度學習-從零到英雄系列 第 8

超級簡單神經網路模型!

  • 分享至 

  • xImage
  •  

神經網路模型的結構

建立神經網路模型的結構時,通常需要三個主要層次:輸入層、至少一層的隱藏層,以及輸出層。隨著隱藏層的增加,模型的複雜度也會增加,計算時間也會增加。

  1. 輸入層(Input Layer):輸入層的主要功能是接收外部資料,不會執行任何運算。輸入層負責將外部資料傳遞到神經網路的下一個階段,是神經網路處理資料的起點。

  2. 隱藏層(Hidden Layer):隱藏層位於輸入層與輸出層之間,是神經網路的核心部分,也是機器學習模型學習的地方,負責進行數學運算、特徵擷取。

  3. 輸出層(Output Layer):輸出層的主要功能是生成模型的輸出。


廢話不多說直接上程式碼!

from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential 
#Sequential序列類別幫助我們將不同的神經網絡層疊加起來,建造深度學習模型。
from tensorflow.keras.layers import Dense
#Dense是密集的意思,表示每個神經元都與前一層的所有神經元緊密相連
from tensorflow.keras import optimizers
#Optimizer(優化器)是用來幫助神經網路調整參數用的,主要目標是要降低誤差

(X_train,y_train),(X_test,y_test)=mnist.load_data()
#一樣的載入訓練跟測試資料

  1. 程式碼第二行我們給它設定64個神經元,並使用sigmoid「激活函數」參與運算。「Sigmoid激活函數」將輸入值映射為0到1之間,可以將輸出解釋為概率。這是模型的第一個隱藏層,它接收輸入數據,而輸入形狀(input_shape)設置為(784,),表示輸入數據是784維(28*28)的向量。
  2. 程式碼第三行是設定模型的輸出層,該層包含10個神經元,並使用softmax激活函數。它有10個輸出節點,每個值介於0-1之間,全部加總的值為1

model=Sequential() #建立了一個空Sequential容器
model.add(Dense(64,activation='sigmoid' , input_shape=(784,))) #用model.add() 加一層密集層
model.add(Dense(10,activation='softmax'))

  1. loss='mean_squared_error':這個參數設置了損失函數,用來衡量模型預測與實際目標之間差距的函數

  2. optimizer=optimizers.SGD(learning_rate=0.01):這個參數設置了優化器,目的是要將損失值降至最低。我們這次設定learning_rate(學習率)為0.01,他會影響模型的訓練速度和穩定性。(白話點解釋學習率不是越大或越小就越好,太大它可能會跳過極小值,太小可能又會拘泥在極小值而忽略大值)

  3. metrics=['accuracy']:這個參數設置了評估指標,用來衡量學習成效,例如accuracy:0.95,就表示準確率為95%(100個樣本裡有95個預測正確)


model.compile(loss='mean_squared_error',optimizer=optimizers.SGD(learning_rate=0.01),metrics=['accuracy'])
#這行程式碼是用來Compile(編譯)神經網絡模型的,它在模型訓練過程中設定一些重要參數,包括loss function(損失函數)、optimizer(優化器)和metrics(評估指標或評量準則)。

#加上昨天做的資料預處理
X_train=X_train.reshape(60000,784).astype('float32')
X_test=X_test.reshape(10000,784).astype('float32')

X_train /= 255
X_test /= 255

  1. model.fit():這是 Keras 中用於開始模型訓練的方法。

  2. X_trainy_train:我們的訓練樣本跟訓練標籤

  3. batch_size=128:這是一個批次訓練樣本大小的參數在這個例子中,每次從6000筆資料取128個訓練樣本。批次大小的選擇會影響訓練的速度和穩定性。

  4. epochs=200:這是訓練的週期,每個 epoch 表示對整個訓練數據集進行一次訓練。

  5. verbose=1:這是希望在訓練過程中輸出提示信息的參數。當 verbose 設置為1時,訓練過程中會顯示訓練進度條和相關信息。

  6. validation_data=(X_test, y_test):這是用於驗證模型性能的數據。X_test 測試集的特徵,y_test 測試集的目標標籤。

model.fit(X_train,y_train,batch_size=128,epochs=200,verbose=1,validation_data=(X_test,y_test))

下面兩張圖為成果
https://ithelp.ithome.com.tw/upload/images/20230920/20161909GlyAtQcmG2.pnghttps://ithelp.ithome.com.tw/upload/images/20230920/20161909RxVcidJFA3.png

我把程式碼打一起結果又會差很多真的很酷,上網查了一下發現深度學習中的模型訓練是一個隨機過程,因此即使使用相同的程式碼和參數,每次訓練過程也可能產生稍微不同的結果。
https://ithelp.ithome.com.tw/upload/images/20230920/20161909ZDVCX4MgQr.png

今日總複習:輸入層接收外部資料,隱藏層是神經網路的核心,用於特徵提取和學習,而輸出層則生成模型的預測輸出。


上一篇
深度學習之資料預處理
下一篇
神經元的基本運作方式
系列文
30天深度學習-從零到英雄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言